package main

import "fmt"

func main() {
	//数组的定义
	//语法：var 关键字 变量名  [长度]类型
	var a [5]int
	a[0] = 1
	a[1] = 2
	a[2] = 3
	//a[5] = 4  //数组下标越界
	fmt.Printf("%T %v\n", a, a)
	//声明的时候带等号，说明在声明的同时要赋值
	//[...]会根据初始元素数量定义数组长度
	var b = [...]int{1, 2, 3, 4}
	fmt.Printf("%T %v\n", b, b)

	//数组的遍历
	var c = [...]string{"北京", "上海", "深圳"}
	for i := 0; i < len(c); i++ {
		fmt.Println(c[i])
	}
	for _, val := range c {
		fmt.Println(val)
	}

	//什么是值类型
	//arr的值赋给了arr2，而不是arr2的内存地址指向arr，所以arr2发生变化了，arr不变
	var arr = [3]int{1, 2, 3}
	arr2 := arr
	arr2[0] = 10
	fmt.Println(arr, arr2)

	//数组截取
	var arr3 = [3]int{1, 2, 3}
	slice := arr3[1:3] //截取，含头不含尾，实际上拿的是下标为1-2的元素
	fmt.Printf("%T %v\n", slice, slice)
}
